IF
이 명령어는 배치 프로그램에서만 사용되는 명령어로 조건적 처리를 수행하기 위해 사용한다.
만약, IF 명령어에 지정된 조건이 참이면 그 조건 뒤에 따르는 명령어를 수행하고, 조건이 거짓인 경우에는 IF 다음의 명령어를 무시하고 다음 명령어를 수행한다.
■ 사용법
IF [NOT] ERRORLEVEL num command
IF [NOT] string1==string2 command
IF [NOT] EXIST filename command
■ 옵션 및 매개변수

not | 조건문을 만족하지 않으면 뒤에 나오는 명령어를 실행하기 위해 사용한다.
errorlevel num | 직전에 실행된 프로그램이 운영 체제에 되돌려 준 종료 코드보다 크거나 같은 값인 경우에만 지정된 명령어를 실행하기 위해 사용한다.
string1==string2 | string1과 string2가 같은 경우에만 뒤에 오는 명령어를 실행한다. 이 값은 문자열이나 %1 혹은 %2와 같은 배치 프로그램의 매개변수가 올 수 있다. 문자열이 올 경우에도 따옴표를 사용하지 않는다.
exist filename | 지정한 파일명을 가진 파일이 있는 경우에 다음에 오는 명령어를 실행하도록 지정한다.
command | 조건문을 만족하는 경우에 실행할 명령어를 지정한다.

■ 참고 사항
프로그램이 중단될 때, 해당 프로그램은 운영 체제에 에러 수준 종료 코드를 되돌려주는데, errorlevel은 이러한 종료 코드를 조건문에 사용할 수 있도록 한다. 종료 코드를 사용하여 배치 프로그램을 분기하는 경우에는 항상 종료 코드가 큰 값이 먼저 지정되어야 한다.
이것은 배치 프로그램이 명령어를 순차적으로 처리하고, IF문에서 사용되는 errorlevel은 지정한 숫자보다 크거나 같은 경우 조건문을 만족하는 것으로 인식하기 때문이다.
따라서, 종료 코드를 큰 수부터 지정하지 않고 낮은 수 예를 들어 0부터 지정한 경우에는 항상 동일한 명령어만 실행될 것이다.
■ 사용 예
만약, DOS가 MARCH.RPT라는 파일을 찾지 못하는 경우 '해당 파일이 없습니다'라는 메시지가 나타나도록 배치 프로그램을 작성하려면 다음과 같이 IF 명령문을 사용한다.
@echo off
if not exist march.rpt echo 해당 파일이 없습니다
다음 예는 드라이브를 포맷하는 동안 에러가 발생하는 경우, 해당 에러에 대한 메시지가 나타나도록 작성된 배치 프로그램이다.
@echo off
format %1 %2
if not errorlevel 1 goto end
echo 포맷하는 도중에 에러가 발생하였습니다
goto exit
:end
echo 정상적으로 포맷이 완료되었습니다
:exit
위의 예에서 'if not errorlevel 1'은 FORMAT이 실행된 뒤 운영 체제로 되돌려준 종료 코드가 '1보다 크거나 같지 않은 경우' 즉, '1보다 작은 경우'에만 end로 이동하여 '정상적으로 포맷이 완료되었습니다'라는 메시지가 나타나고 배치 프로그램을 종료한다.
프로그램의 종료 코드를 이용하여 배치 프로그램을 작성하는 경우 주의할 것은 errorlevel 다음에 지정한 숫자는 그보다 크거나 같은 경우를 지정하는 것이기 때문에, 다수의 에러 수준에 따라 다른 명령어를 수행하도록 하는 경우에는 반드시 errorlevel의 숫자가 큰 것부터 차례로 IF 명령문을 작성해야 한다.
다음 예는 디렉토리의 존재를 검사하기 위한 IF 명령문이다. IF 명령어는 디렉토리를 직접 검사할 수 없다. 그러나 널(NUL) 장치는 모든 디렉토리에 존재하기 때문에 디렉토리가 있는지를 검사하기 위해 널 문자를 찾음으로써 디렉토리를 확인할 수 있다.
if exist c:\hwp\data\nul goto process
위의 예에서는 C드라이브 상의 HWP\DATA 디렉토리가 있는지를 검사하여 있으면 process 레이블을 실행하고, 없으면 다음 명령어 라인을 실행하라는 것이다.